package com.xyf.blog.web.admin;
import com.xyf.blog.po.Type;
import com.xyf.blog.po.User;
import com.xyf.blog.service.UserService;
import com.xyf.blog.util.MD5Utils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import static com.xyf.blog.util.MD5Utils.code;

@Controller
@RequestMapping("/admin")//获取地址栏传过来的信息
public class LoginController {

    @Autowired
    UserService userService;



//软件测试用，与项目无关
    @PostMapping("/addadmin")
    public String addadmin(@RequestBody User user){
        String code = MD5Utils.code(user.getPassword());
        user.setPassword(code);
        User user1 = userService.saveUser(user);
        return "admin/success";
    }



    //    这里不写地址，就会自动设定为地址为requestmapping的/admin为该方法的地址
    @GetMapping
    public String loginPage() {
        System.out.println("loginpage");
        return "admin/login";//返回的是静态目录下的资源

    }



    @PostMapping("/login")//处理传过来的表单
    public String login(@RequestParam String username,
                        @RequestParam String password,
                        HttpServletRequest request, RedirectAttributes redirectAttributes) {
        User user = userService.checkUser(username, password);//如果数据库没查询到，那么就不会把东西放进user了
        if (user != null) {
            //不要把密码登录过去
            user.setPassword(null);
            ServletContext context = request.getServletContext();
            context.setAttribute("user", user);
            System.out.println(context.getAttribute("user")+"session");
            System.out.println("return \"index\"");
            return "admin/addadmin";
        } else {
//            表单提交用重定向到admin，防止多次提交表单
//            model中的内容是放在请求域中的
//            Model对象的数据会复制到Servlet Response中，
//            所以Model对象的生存期和Servlet Response对象的生存期是一样的，
//            都只在一次请求中有效。所以在一次请求中存在Model内的东西，在下一次应该是不能访问的。所以这里不用model
//            用redirectAttributes
            redirectAttributes.addFlashAttribute("msg", "用户名或者密码错误");

            System.out.println(" return \"redirect:/admin\";");
            return "redirect:/admin";
        }
    }
    @GetMapping ("/logout")
    public String logout(HttpSession session) {
        session.removeAttribute("user");
//        表单提价类用redirect
        System.out.println("return \"redirect:/admin\";");
        return "redirect:/admin";//重定向的是路径

    }
}